package org.erpworld.hr.dto;

/**
 * Author: volkan
 */
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
import java.util.List;
import javax.faces.bean.ManagedProperty;
import javax.faces.event.ValueChangeEvent;
import org.erpworld.hr.dao.User;
import org.erpworld.hr.dao.UserDAO;
import org.erpworld.util.JsfUtil;
import org.primefaces.event.SelectEvent;

@ManagedBean
@RequestScoped
public class UserDto {

    private final Logger log = LoggerFactory.getLogger(UserDAO.class);
    private Integer id;
    @NotNull(message = "Kullanıcı adı boş bırakılamaz.")
    @Size(min = 5, max = 20, message = "Geçerli bir kullanıcı ismi girin.(5-20) karakter.")
    private String username;
    @NotNull(message = "Paraola adı boş bırakılamaz.")
    @Size(min = 5, max = 20, message = "Geçerli bir parola girin.(5-12) karakter.")
    private String password;
    private String password2;
    @NotNull(message = "Email adresi adı boş bırakılamaz.")
    @Pattern(regexp = "^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$", message = "Email formatı uygun değil.")
    private String email;
    private List userList;
    private UserDAO userDao;
    private User selectedUser;
    @ManagedProperty("#{param.edit}")
    private Boolean edit;

    //Consturturs ----------------------------------------------------------
    public UserDto() {
        userDao = new UserDAO();
        userList = userDao.list();

    }

    public UserDto(Integer id, String username, String password) {
        this.id = id;
        this.username = username;
        this.password = password;
    }

    public UserDto(Integer id, String username, String password, String email) {
        this(id, username, password);
        this.email = email;
    }

    //Actions----------------------------------------------------------------
    public void addUser() {
        log.info("User Ekleniyor....");
        if (!password.equals(password2)) {
            log.info("Girilen paraolalar farklı ...");
            JsfUtil.addErrorMessage("Girilen parolalar farklı .");
        } else if (userDao.existUsername(username)) {
            log.info("Kullanıcı adı kullanılıyor ...");
            JsfUtil.addErrorMessage(username + "  uygun değil .");
        } else if (userDao.existEmail(email)) {
            log.info("Email adresi kullanılıyor ...");
            JsfUtil.addErrorMessage("Email adresi uygun değil .");
        } else {

            userDao.create(new User(username, password, email));
            JsfUtil.addInfoMessage("Kullanıcı başarı ile oluşturulmuştur.");

        }

    }

    public void onRowSelect(SelectEvent se) {
        User u = (User) se.getObject();
        JsfUtil.addInfoMessage(u.getUsername());
        this.username=u.getUsername();
    }
    public void onTextChanges(ValueChangeEvent ve){
        
    }

    /*
    sifre karsılaştıma validasyon   emailformat şifrehash
     */
    //Getter Setter --------------------------------------------------------
    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public List getUserList() {
        return userList;
    }

    public void setUserList(List userList) {
        this.userList = userList;
    }

    public String getPassword2() {
        return password2;
    }

    public void setPassword2(String password2) {
        this.password2 = password2;
    }

    public User getSelectedUser() {
        return selectedUser;
    }

    public void setSelectedUser(User selectedUser) {
        this.selectedUser = selectedUser;
    }

    public Boolean getEdit() {
        return edit;
    }

    public void setEdit(Boolean edit) {
        this.edit = edit;
    }
}
